export function ajax(options) { // 传入一个对象作为参数  {url, data = "", async = true, dataType = "text", success}

    var { type = "get", url, data = "", async = true, dataType = "text", success, error } = options;


    var xhr = new XMLHttpRequest();

    // 如果data传入的是一个纯对象  -> 将其解析为参数数据队列
    if (Object.prototype.toString.call(data) == "[object Object]") {
        var list = [];
        for (var key in data) {    // key => "user"
            var val = data[key];  // "a123123"
            var str = key + "=" + val;  // "user=a123123"
            list.push(str);
        }
        // console.log(list);

        data = list.join("&");
    }


    // ajax get传参 => 将参数数据队列拼接到请求地址之后,用?分隔

    if (type.toLowerCase() == "get") {
        xhr.open("get", data ? url + "?" + data : url, async);

        xhr.send();

    } else if (type.toLowerCase() == "post") {
        xhr.open("post", url, async);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send(data);
    }

    xhr.onreadystatechange = function () {
        // debugger;
        // 2 3 4
        try {
            if (xhr.readyState == 4 && xhr.status == 200) {
                var result = xhr.responseText;
                // console.log("请求成功", result);

                if (dataType == "json") {
                    result = JSON.parse(result);
                }
                // console.log(result);

                // 请求不同的接口 => 接口响应结果也是不一样的 -> 不能把拿到数据之后执行的内容定死  => 写活?

                if (success) {
                    success(result);
                }


            }
        } catch (err) {
            if (error) {  // 有错误回调函数 -> 执行
                error(err);
            } else { // 没有 就抛错
                throw err;
            }
        }
    }
}


export function request(options) { // 传入一个对象作为参数  {url, data = "", async = true, dataType = "text", success}

    var { type = "get", url, data = "", async = true, dataType = "text" } = options;

    // ajax请求异步操作  返回进行中状态的Promise对象 {<pending>:undefined}
    return new Promise(function (resolve, reject) {
        var xhr = new XMLHttpRequest();

        // 如果data传入的是一个纯对象  -> 将其解析为参数数据队列
        if (Object.prototype.toString.call(data) == "[object Object]") {
            var list = [];
            for (var key in data) {    // key => "user"
                var val = data[key];  // "a123123"
                var str = key + "=" + val;  // "user=a123123"
                list.push(str);
            }
            // console.log(list);

            data = list.join("&");
        }


        // ajax get传参 => 将参数数据队列拼接到请求地址之后,用?分隔

        if (type.toLowerCase() == "get") {
            xhr.open("get", data ? url + "?" + data : url, async);

            xhr.send();

        } else if (type.toLowerCase() == "post") {
            xhr.open("post", url, async);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.send(data);
        }

        xhr.onreadystatechange = function () {
            // debugger;
            // 2 3 4
            try {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var result = xhr.responseText;
                    // console.log("请求成功", result);

                    if (dataType == "json") {
                        result = JSON.parse(result);
                    }
                    // console.log(result);

                    // 请求不同的接口 => 接口响应结果也是不一样的 -> 不能把拿到数据之后执行的内容定死  => 写活?

                    resolve(result);  //请求成功之后 -> {<fulfilled>:result}

                }
            } catch (err) {
                reject(err);
            }
        }
    })


}

